#ifndef TestQueryEvaluator_h
#define TestQueryEvaluator_h

#include <cppunit/extensions/HelperMacros.h>

class QueryEvaluatorTest : public CPPUNIT_NS::TestFixture {
	private:
		CPPUNIT_TEST_SUITE( QueryEvaluatorTest );
		CPPUNIT_TEST( testConstructor );
		// TODO problem: to use a pkb stub's functions properly, a PKB pointer must be used in ResultGraphTable. 
		//				However, when a PKB pointer is used in ResultGraphTable, unknown errors pop up.
		/*CPPUNIT_TEST( testEvaluateFollows );
		CPPUNIT_TEST( testEvaluateFollowsStar );
		CPPUNIT_TEST( testEvaluateParent );
		CPPUNIT_TEST( testEvaluateParentStar );
		CPPUNIT_TEST( testEvaluateModifies );
		CPPUNIT_TEST( testEvaluateUses );
		CPPUNIT_TEST( testEvaluatePatternAssign );
		CPPUNIT_TEST( testEvaluateSuchThatPatternAssign );*/
		CPPUNIT_TEST_SUITE_END();

	public:
		void setUp();
		void tearDown();
		// Tests the constructor
		void testConstructor();
		// Tests the evaluateQuery function for FOLLOWS relationship
		void testEvaluateFollows();
		// Tests the evaluateQuery function for FOLLOWSTAR relationship
		void testEvaluateFollowsStar();
		// Tests the evaluateQuery function for PARENT relationship
		void testEvaluateParent();
		// Tests the evaluateQuery function for PARENTSTAR relationship
		void testEvaluateParentStar();
		// Tests the evaluateQuery function for MODIFIES relationship
		void testEvaluateModifies();
		// Tests the evaluateQuery function for USES relationship
		void testEvaluateUses();
		// Tests the evaluateQuery function for PATTERNS!
		void testEvaluatePatternAssign();
		// Tests the evaluateQuery function for both such that and PATTERNS!
		void testEvaluateSuchThatPatternAssign();
};
#endif